#ifndef APP_BUFFER_H
#define APP_BUFFER_H
#include <pthread.h>
// 缓存区的结构体
typedef struct
{
    char *ptr;            // 缓存区指针
    int total_size;       // 缓存区大小
    int len;              // 已存数据长度
    int offset;           // 缓存区数据偏移量
    pthread_mutex_t lock; // 互斥锁

} Buffer;

/**
 * @brief 初始化缓存区
 * @param size 缓存区大小
 *
 * @return Buffer* 缓存区指针
 */
Buffer *app_buffer_init(int size);

/**
 * @brief 释放缓存区
 * @param buffer 缓存区指针
 */
void app_buffer_free(Buffer *buffer);

/**
 * @brief 向缓存区写入数据
 * @param buffer 缓存区指针
 * @param data 数据指针
 * @param len 数据长度
 * @return int 写入是否成功 0:成功 -1:失败（可能缓存区的空间不够）
 */
int app_buffer_write(Buffer *buffer, char *data, int len);

/**
 * @brief 从缓存区读取数据
 * @param buffer 缓存区指针
 * @param data 存放读取到的数据的容器
 * @param len 要读取数据的长度
 * @return int 成功：0，失败：-1（可能缓存区的数据长度不够）
 */
int app_buffer_read(Buffer *buffer, char *data, int len);

#endif // APP_BUFFER_H